学习如何设计一款布林带(Bollinger Bands)交易系统 |
您所在的位置:网站首页 › bollinger bands参数 › 学习如何设计一款布林带(Bollinger Bands)交易系统 |
概述 在交易领域,有很多工具和方法可用来帮助我们实现交易目标。这些工具可根据市场条件或状况来使用。 方法之一是波带交易。 波带交易的主要概念是在波带的两条边界之间进行交易,据判定的波带买入和卖出,并从中获益。 其中一个工具是布林带指标。 该指标是技术分析和交易领域最流行或最常用的指标之一。 在本文中,我将与大家分享关于这个布林带指标的信息,从而增强我们对它是什么、我们如何计算它、以及我们如何使用它对我们有利的理解。之后,您将能够根据自己的策略以自己喜欢的方式使用它。 接下来,我将与大家分享我们如何通过准确而简单的方式,基于这个布林带指标来设计一款交易系统。 因此,我们将涵盖以下主题: 布林带定义 布林带策略 布林带策略系统设计 结束语 参考我们将学习布林带,它测量数据在其平均值附近的离散度。该指标由约翰·博林格(John Bollinger)创造。 它由围绕 20 天移动平均线的两条波段构成,以测量数据(价格)在其均值(20 天移动平均线)周围的离散度。 布林带指标似乎与轨道线指数相同,因为它在价格周围也有两条波带。 但事实并非如此,因为布林带和轨道线之间的区别在于,布林带指标并没有以固定百分比绘制于移动平均线之外位置,因布林带指标的计算允许根据移动平均线的标准偏差扩张或收缩。 我们将在布林带定义章节或主题中了解这些,以及其它细节。 我们还将学习如何通过一些方式来使用布林格带策略,从而令我们的交易富有竞争力、并从中受益,这些肯定都会在布林带策略章节里涉及。 然后我们将进入本文最有趣的部分:如何准确可靠地在算法交易系统中运用这些策略,这是我们将在布林带策略蓝图和体系设计部分要探讨的内容。 请注意: 本文中的所有代码都将以 MQL5 编写,并将在 MetaTrader 5 上执行。 如果您想练习和提高学习能力,我建议您自行编写和执行代码。 因此,您需要 MetaTrader 5 终端来执行代码,需要 MQL5 的 MetaEditor 来编写代码,下面的示意图就是为它们准备的。在设备上下载并安装 MetaTrader 5 之后,您可从以下链接下载:https://www.metatrader5.com/zh/download。 之后,您会发现 MetaTrader 5 窗口与下图相同: 更多相关信息,您可以通过以下链接阅读我之前的文章:https://www.mql5.com/zh/articles/10293 正如我经常提到的,在不同的事件中,编程或编码是一种神奇的工具,它令我们能够自动、准确地完成动作,从而让我们的生活变得轻松、顺利。 因此,在这类领域投资的一个重要目标就是,学习如何以适当的方式使用它,在生活的不同领域得到期望的目标。说到交易,我需要想象一下,当您给电脑下达指令,让它替您做事;在您预期的时刻,电脑会毫无异议地遵照执行您的指令;如此,您就有时间去做任何其它事情,生活将会多么轻松愉快。 这是一种令人惊叹的生活方式,因此,以适合自己的方式,体会编码或编程的乐趣将是一个重要的目标,即便您为自己编码、或请别人为您编码。 免责声明这篇文章的所有内容都是为了教学目的,而非为了其它目的。 因此,您应对根据本文内容采取的任何行动负责,因为本文内容不保证任何结果。 那么,我们通读文章来了解更多关于这个有趣的话题和指标。 布林带定义波带交易的概念历史悠久、有趣,并在许多策略里所采用。波带交易主要基于在某种趋势指标之上和之下构建波带。 例如,我们可以基于移动平均线或轨道线,并按百分比距其上下偏移。 此外,还有两条平行线形成通道,分别位于价格上方和下方,可用于检测转折点。 但所有这些方法都是固定的,不会依据价格变动做出反应。 换句话说,它们不会随着价格波动而扩张或收缩。 布林带可以做到这一点,这在于它实现的具体算法。 我们将在本章节中看到指标计算的细节。 下图显示了轨道线指标的示例,及其依据价格的显示方式: 正如您在前一张图片中所见,我们有两条围绕价格的波带:下波带围绕着最低价位,上波带围绕着最高价位。 所以,我们需要知道的主要思想是,有很多方法是基于历史上的交易波带,最常见的是百分比波带。 依据交易波带的思路也开发出很多工具。 其中一个开发出的工具就是用于交易波带的布林带指标。 它不同于前面提到的方法,因为它的算法能够进行扩张和收缩。 布林带指标由 John Bollinger 于 20 世纪 80 年代初创建,他是金融市场和交易领域广受欢迎的专家之一。 他是一位 CFA(特许金融分析师)和 CMT(特许市场技术员)。 布林带指标是一款流行的技术指标,它衡量波动性,可以根据市场情况进行扩张和收缩。 它可用于所有金融市场,如股票、外汇......等等。现在,我们来谈谈布林带的构造:就像我们之前提到的,交易波带的概念是从衡量一些趋势指标的中心开始的。 然后我们在这些衡量值的上下构造波带。 对于布林带指标,趋势中心的衡量是简单移动平均值,波带则由移动标准偏差的波动性度量确定。 布林带指标: 它衡量数据在其平均值(移动平均值)周围的离散度。 它是一个波动性指标。 布林带和轨道线(或任何以固定百分比的交易波带)方法之间的区别在于,其它指标采用或高于或低于移动平均线的特定百分比,但布林带采用的是移动平均线的标准偏差。 波动性增加时,波带自动扩张,波动性降低时,波带则自动收缩。 这样的动态特性令它们即使采用标准设置也能适用于不同的证券。 布林带是一款交易工具,可用于判定交易的入场和离场点。 波带通常用于判定超买和超卖状况。 它可以用来识别 M 形顶部和 W 形底部,或者判定趋势的强度。 下面的公式显示了如何计算布林带: 调整设置: 现在,如果有人问我们是否可以通过任何其它方式调整布林带的设置,从而适用于我们的策略或交易计划,答案是肯定的,我们当然可以这样做,尤其是经过调整和测试,它能给我们带来优良的结果。 我们还必须知道,布林建议对标准偏差乘数做一些小的调整。 我们还必须知道,改变移动平均线的周期会影响标准偏差的计算周期。 布林还建议,如果我们采用 50 周期的简单移动平均线,则将标准偏差乘数增加到 2.1;如果我们采用 10 周期的简单移动平均线,则将其减少到 1.9。 如今,在当前世界中,我们不需要手动计算它,因为在 MetaTrader 5 中已经为我们准备好了内置指标。 下图展示了如何将其添加或将指标附加到图表上。 在 MetaTrader 5 中选择插入菜单: 1. Period 是为移动平均线选择周期。 2. Deviations 是为波带选择上下偏差参数。 3. Apply to: 选择将采用的价格类型(收盘价、开盘价、最高价、最低价、中间价、典型价格和加权收盘价)参数。 4. Style: 选择指标的样式(指标线条的颜色、形状和宽度)。 5. Shift: 设置应用指标的移位值。 就像我之前提到的,我们可以根据交易者的输入和策略来调整这些设置。 现在,我们在价格图表上绘制了布林带指标,其显示方式与下图相同: 此刻,我们将讨论布林带策略,我们将知道如何运用它,并从中受益。 我们可以利用不同市场条件、或不同市场走势的布林带,如上升趋势、下降趋势和横盘。 在每一种市场条件下,我们都可以运用众多策略,但在这里我们只提其中的一些。 上升趋势期间首先,我们需要了解在上升趋势中价格如何随移动平均线移动,因为我们可以发现价格在上升趋势中的大部分时间都在其均值(移动平均线)之上移动。 所以,我们会发现,在上升趋势中,价格大部分时间在移动平均线和波带上边界之间移动。 这意味着,因受买方支配,价格会出现更高的低点和更高的高点。 首先,我们需要了解在下跌趋势中价格如何随移动平均线移动,因为我们可以发现价格在下跌趋势中的大部分时间都在其均值(移动平均线)之下移动。 所以,我们会发现,在下跌趋势中,价格大部分时间在移动平均线和波带下边界之间移动。 这意味着,因受卖方支配,价格会出现更低的高点和更低的低点。 首先,我们需要了解价格在横盘期间是如何变动的,因为我们可以发现横盘是除了上升趋势和下跌趋势之外的任何走势。 横盘表示买方和卖方之间的平衡,因为他们中的一方无法完全支配市场。 以下图片是一些横盘走势的示例: 之前示意图是横盘走势的示例,比我提到的更多,但横盘走势的概念是除了上升和下跌趋势之外的任何走势。 现在,我们需要知道横盘走势将如何影响移动平均线,因为价格在移动平均线附近游走,故它会随机上穿或和下穿均线。 下图就是一个示例: 在这个有趣的部分,我们将学习如何基于布林带指标编写算法交易系统。 我们还将学习如何创建之前提到的三种交易策略(上升趋势、下跌趋势和横盘策略)。 您可以随心所欲地设计自己的交易系统,从简单的到先进的交易系统。 例如,您可以创建并设计一个简单的交易系统,它会根据一个简单的概念生成一个简单的信号,然后您再根据这个信号采取行动;或者您可以创建并设计一个高级交易系统,它不仅会为您提供简单的信号,而且会根据相关概念的组合给出一个高级信号,并自动执行。 有很多不同的方式。 在本文中,我们将讨论一个简单的交易系统 — 我们创建它只是为了学习这个概念。 基于这些知识,您就能开发类似的系统,或者按照自己的方式设计自己的交易系统。 我希望这篇文章对您有用,并帮助您达成交易或投资目标。 首先,我们要学习如何设计一个纯布林带代码,该代码允许在图表上显示三个注释,分别为移动平均值、波带上限值和下限值。 以下是执行此操作的代码: //+------------------------------------------------------------------+ //| Simple Bollinger Bands.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //create an array for several prices double MiddleBandArray[]; double UpperBandArray[]; double LowerBandArray[]; //sort the price array from the cuurent candle downwards ArraySetAsSeries(MiddleBandArray,true); ArraySetAsSeries(UpperBandArray,true); ArraySetAsSeries(LowerBandArray,true); //define Bollinger Bands int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE); //copy price info into the array CopyBuffer(BollingerBands,0,0,3,MiddleBandArray); CopyBuffer(BollingerBands,1,0,3,UpperBandArray); CopyBuffer(BollingerBands,2,0,3,LowerBandArray); //calcualte EA for the cuurent candle double MiddleBandValue=MiddleBandArray[0]; double UpperBandValue=UpperBandArray[0]; double LowerBandValue=LowerBandArray[0]; //comments Comment("MiddleBandValue: ",MiddleBandValue,"\n", "UpperBandValue: ",UpperBandValue,"\n","LowerBandValue: ",LowerBandValue,"\n"); } //+------------------------------------------------------------------+ 现在,在编写并编译代码之后,我们必须确保代码没有错误或警告,如下图所示: B- 当触及波带上限时生成做空信号, 以下是执行此操作的代码: //+------------------------------------------------------------------+ //| Sell sideways BB strategy.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //define Ask, Bid double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); //create an array for several prices double MiddleBandArray[]; double UpperBandArray[]; double LowerBandArray[]; //sort the price array from the cuurent candle downwards ArraySetAsSeries(MiddleBandArray,true); ArraySetAsSeries(UpperBandArray,true); ArraySetAsSeries(LowerBandArray,true); //define Bollinger Bands int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE); //copy price info into the array CopyBuffer(BollingerBands,0,0,3,MiddleBandArray); CopyBuffer(BollingerBands,1,0,3,UpperBandArray); CopyBuffer(BollingerBands,2,0,3,LowerBandArray); //calcualte EA for the cuurent candle double MiddleBandValue=MiddleBandArray[0]; double UpperBandValue=UpperBandArray[0]; double LowerBandValue=LowerBandArray[0]; //giving sell signal when price < MA if ( (Bid>=UpperBandArray[0]) ) { Comment("SELL"); } //check if we have a take profit signal if ( (Ask |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |